#!/bin/bash
###
 # @Author: 137 '1432417996@qq.com'
 # @Date: 2025-05-09 14:32:57
 # @LastEditors: 137 '1432417996@qq.com'
 # @LastEditTime: 2025-05-16 01:33:44
 # @FilePath: \starter-3\deploy.sh
 # @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
### 

# 设置错误时退出
set -e

# 定义目录路径
CODE_DIR="/home/code/user/trade-sea-fenuxt"
DIST_DIR="/home/sites/user"
TEMP_DIR="/tmp/deploy_temp_$(date +%s)"

# 设置Node.js内存限制
export NODE_OPTIONS="--max-old-space-size=4096"

# 记录开始时间
START_TIME=$(date +%s)

# 输出带颜色的日志
log() {
    echo -e "\033[32m[$(date +'%Y-%m-%d %H:%M:%S')] $1\033[0m"
}

# 错误日志
error() {
    echo -e "\033[31m[$(date +'%Y-%m-%d %H:%M:%S')] $1\033[0m"
}

# 计算并显示耗时
show_duration() {
    local end_time=$(date +%s)
    local duration=$((end_time - START_TIME))
    local minutes=$((duration / 60))
    local seconds=$((duration % 60))
    log "总耗时: ${minutes}分${seconds}秒"
}

# 检查目录是否存在
if [ ! -d "$CODE_DIR" ]; then
    error "代码目录 $CODE_DIR 不存在！"
    exit 1
fi

# 进入代码目录
cd $CODE_DIR

# 清理npm缓存
log "清理npm缓存..."
npm cache clean --force

# 安装依赖
log "安装依赖..."
npm install

# 构建项目
log "开始构建项目..."
npm run build:prod

# 检查构建是否成功
if [ $? -eq 0 ]; then
    log "构建成功！"
else
    error "构建失败！"
    show_duration
    exit 1
fi

# 创建临时目录
log "创建临时目录..."
mkdir -p "$TEMP_DIR"

# 压缩构建文件
log "压缩构建文件..."
if [ -d ".output/public" ]; then
    cd .output/public
    zip -r "$TEMP_DIR/build.zip" ./*
    cd $CODE_DIR
else
    error "构建输出目录 .output/public 不存在！"
    show_duration
    exit 1
fi

# 清理构建产生的临时文件
log "清理构建临时文件..."
rm -rf dist
rm -rf .output
rm -rf node_modules/.vite

# 备份当前网站文件
log "备份当前网站文件..."
if [ -d "$DIST_DIR" ]; then
    backup_dir="${DIST_DIR}_backup_$(date +%Y%m%d_%H%M%S)_user"
    mv "$DIST_DIR" "$backup_dir"
    log "已备份到: $backup_dir"
fi

# 创建新的网站目录
log "创建新的网站目录..."
mkdir -p "$DIST_DIR"

# 记录解压开始时间
UNZIP_START_TIME=$(date +%s)

# 解压文件到网站目录
log "解压文件到网站目录..."
unzip -o "$TEMP_DIR/build.zip" -d "$DIST_DIR"

# 计算解压耗时
UNZIP_END_TIME=$(date +%s)
UNZIP_DURATION=$((UNZIP_END_TIME - UNZIP_START_TIME))
log "解压耗时: ${UNZIP_DURATION}秒"

# 清理临时文件
log "清理临时文件..."
rm -rf "$TEMP_DIR"

# 设置目录权限
log "设置目录权限..."
chown -R www:www "$DIST_DIR"
chmod -R 755 "$DIST_DIR"

log "部署完成！"
show_duration 